const http = require('http');
const fs = require('fs');
const url = require('url');
const template = require('art-template');
var querystring = require('querystring');

const port = 3001;

let userInfo = [{
		'username': 'admin',
		'password1': 'admin123'
	},
	{
		'username': '123',
		'password1': '123'
	}
];
let loginMess = false;
let loginErrMess = false;

http
	.createServer((req, res) => {
		let url_obj = url.parse(req.url, true);
		let pathName = url_obj.pathname; // 请求路径，不包含参数
		let query = url_obj.query; // get 请求参数


		if (pathName.indexOf('/public/') === 0) {
			// 处理静态资源
			fs.readFile('.' + pathName, (err, data) => {
				if (err) return res.end('404');

				res.end(data);
			});
		} else {
			// 处理网页
			if (pathName === '/newuser') {
				// res.end(JSON.stringify(query));
				// 注册新用户，get请求

				// 将 username 和 password1 追加进 userInfo		
				userInfo.push(query);

				// 重定向到 index.html
				res.statusCode = 302;
				res.setHeader('Location', '/');
				res.end();
			} else if (pathName === '/userlogin') {
				// 用户登录，post请求
				let post = ''; // post 暂存区

				req.on('data', (data) => {
					// 每当接收到请求体数据，累加至post
					post += data;
				});

				req.on('end', () => {
					// 出发 end 事件后，通过 querystring.parse 将 post 解析为 POST 格式
					post = querystring.parse(post);

					// 拿到 username 和 password
					let username = post.username;
					let password = post.password;

					userInfo.forEach((ele, index, arr) => {
						if (ele.username === username) {
							// username 与 userInfo[].username 每项比较
							if (ele.password1 === password) {
								// 用户名相同，比较密码
								loginMess = true;
								res.statusCode = 302;
								res.setHeader('Location', '/');
								res.end();
							} else {
								// 密码不匹配
								loginErrMess = true;
								res.statusCode = 302;
								res.setHeader('Location', '/login');
								res.end();
							}
						}
						if (index === arr.length-1) {
							// 不存在账号
							loginErrMess = true;
							res.statusCode = 302;
							res.setHeader('Location', '/login');
							res.end();
						}
					})
				})
			} else {
				// 其它页面
				if (pathName === '/') pathName = '/index';
				fs.readFile('./views' + pathName + '.html', (err, data) => {
					if (err) return res.end('404');

					// 替换页面中的 标记
					let ret = template.render(data.toString(), {
						userInfo: userInfo,
						loginMess: loginMess,
						loginErrMess: loginErrMess
					});
					res.end(ret);
				});
			}
		}
	})
	.listen(port, () => {
		console.log('running...');
	});
